package org.example.enums;

import java.io.Serializable;
import java.util.Arrays;

/**
 * @author: feiwang_6
 * @create: 2020/10/19 10:37
 * @description: 枚举基类
 */
public interface BaseEnum extends Serializable {
    int getCode();

    String getDesc();

    /**
     * 根据code获取枚举
     * @param enumClass
     * @param code
     * @param <E>
     * @return
     */
    static <E extends Enum<?> & BaseEnum> E codeOf(Class<E> enumClass, int code) {
        return Arrays.stream(enumClass.getEnumConstants()).filter((e) -> e.getCode() == code).findFirst().orElse(null);
    }

    /**
     * 根据code获得desc
     * @param enumClass
     * @param code
     * @param <E>
     * @return
     */
    static <E extends Enum<?> & BaseEnum> String getDescByCode(Class<E> enumClass, int code) {
        E enumCode = codeOf(enumClass, code);
        return null != enumCode ? enumCode.getDesc() : "";
    }

    /**
     * check code是否存在enums中
     * @param enumClass
     * @param code
     * @param <E>
     * @return
     */
    static <E extends Enum<?> & BaseEnum> boolean checkCode(Class<E> enumClass, int code) {
        E enumConstants = codeOf(enumClass, code);
        return null != enumConstants;
    }
}
